//package com.ls.config.auth;
//
//import cn.dev33.satoken.interceptor.SaInterceptor;
//import cn.dev33.satoken.router.SaRouter;
//import cn.dev33.satoken.stp.StpUtil;
//import cn.hutool.core.collection.CollectionUtil;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//
//import java.util.ArrayList;
//
///**
// * @author pengyu
// */
//@Slf4j
//@Configuration
//@RequiredArgsConstructor
//public class SaTokenConfigureBak implements WebMvcConfigurer {
//
//    private final ObjectMapper objectMapper;
//
//
//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
//
//
//        // 注册 Sa-Token 拦截器
//        registry.addInterceptor(new SaInterceptor(handler -> {
//            // 登录校验 -- 拦截所有路由，并排除登录接口
//            SaRouter
//                    .match("/**")
//                    .notMatch("/login/**")
//                    .check(r -> {
//                        StpUtil.checkLogin();
//                    });
//
//            ArrayList<String> commonInterfaceList = CollectionUtil.newArrayList(
//                    "/shop/query_all_valid",
//                    "/region/tree",
//                    "/material/queryAllValid",
//                    "/materialClassify/queryAllValid",
//                    "/materialStatus/queryAllValid",
//                    "/region-group/select-list",
//                    "/menu/select-list");
//
//            // 权限校验 -- 不同模块校验不同权限
//            SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
//
//            SaRouter.match("/role/**").notMatch("/role/listAllValid").check(r -> StpUtil.checkPermission("role"));
//            // 该接用户管理页面也会用到
//            SaRouter.match("/role/listAllValid").check(r -> StpUtil.checkPermissionOr("role", "user"));
//            SaRouter.match("/resource/**").notMatch("/resource/tree").check(r -> StpUtil.checkPermission("resource"));
//            //该接口在角色管理页面也会调用
//            SaRouter.match("/resource/tree").check(r -> StpUtil.checkPermissionOr("resource", "role"));
//            //区域组选择门店接口
//            ArrayList<String> regionGroupShopApi = CollectionUtil.newArrayList(
//                    "/shop/region-group/administrative-divisions/tree",
//                    "/shop/administrative-divisions/page");
//            SaRouter.match("/shop/**")
//                    .notMatch(commonInterfaceList)
//                    .notMatch(regionGroupShopApi)
//                    .check(r -> StpUtil.checkPermission("shop"));
//            SaRouter.match(regionGroupShopApi).check(r -> StpUtil.checkPermissionOr("shop", "regionGroup"));
//            //区域组管理端接口权限
//            SaRouter.match("/region-group/**").notMatch(commonInterfaceList).check(r -> StpUtil.checkPermission("regionGroup"));
//            //菜单管理端接口权限
//            SaRouter.match("/menu/**").notMatch(commonInterfaceList).check(r -> StpUtil.checkPermission("menu"));
//            //飞书管理端接口权限
//            SaRouter.match("/lark/web/**", r -> StpUtil.checkPermission("lark"));
//            //平板设备管理端接口权限
//            SaRouter.match("/terminal/**", r -> StpUtil.checkPermission("terminal"));
//            //工作台管理端接口权限
//            SaRouter.match("/workBench/**", r -> StpUtil.checkPermission("workBench"));
//            SaRouter.match("/staff/**").check(r -> StpUtil.checkPermission("shopStaff"));
//            SaRouter.match("/region/**").notMatch(commonInterfaceList).check(r -> StpUtil.checkPermission("region"));
//            //物料管理端接口权限
//            ArrayList<String> materialNotMatch = new ArrayList<>(commonInterfaceList);
//            materialNotMatch.add("/material/query_all_valid");
//            SaRouter.match("/material/*").notMatch(materialNotMatch).check(r -> StpUtil.checkPermission("material"));
//            //物料对外接口
//            SaRouter.match("/material/query_all_valid").check(r -> StpUtil.checkPermission("material#query_all_valid"));
//            //打印机管理端接口权限
//            SaRouter.match("/printer/**").notMatch("/printer/v2/**", "/printer/activate").check(r -> StpUtil.checkPermission("printer"));
//            //打印机对外接口
//            SaRouter.match("/printer/activate").check(o -> StpUtil.checkPermission("printer#activate"));
//            SaRouter.match("/printer/v2/page_with_store_code").check(o -> StpUtil.checkPermission("printer#v2#page_with_store_code"));
//            SaRouter.match("/printer/v2/create_with_store_code").check(o -> StpUtil.checkPermission("printer#v2#create_with_store_code"));
//            SaRouter.match("/printer/v2/update").check(o -> StpUtil.checkPermission("printer#v2#update"));
//            SaRouter.match("/printer/v2/delete").check(o -> StpUtil.checkPermission("printer#v2#delete"));
//            //物料分类管理端接口权限
//            SaRouter.match("/materialClassify/**").notMatch(commonInterfaceList).check(r -> StpUtil.checkPermission("materialClassify"));
//            //物料分类对外接口
//            SaRouter.match("/classify/query_all_valid", r -> StpUtil.checkPermission("classify#query_all_valid"));
//            //物料状态管理端接口权限
//            SaRouter.match("/materialStatus/**").notMatch(commonInterfaceList).check(r -> StpUtil.checkPermission("materialStatus"));
//            //物料状态对外接口权限
//            SaRouter.match("/material_save_type/query_all", r -> StpUtil.checkPermission("material_save_type#query_all"));
//            //物料效期管理端接口权限
//            //菜单选择物料效期接口
//            String menuSelectMaterialExpirationRecordApi = "/materialExpirationRecord/classifyMaterialExpiration/list";
//            SaRouter.match("/materialExpirationRecord/**")
//                    .notMatch(menuSelectMaterialExpirationRecordApi)
//                    .check(r -> StpUtil.checkPermission("materialExpirationRecord"));
//            SaRouter.match(menuSelectMaterialExpirationRecordApi)
//                    .check(r -> StpUtil.checkPermissionOr("materialExpirationRecord", "menu"));
//            //物料效期对外接口权限
//            SaRouter.match("/material_type/query_all_valid", r -> StpUtil.checkPermission("material_type#query_all_valid"));
//            //打印模板管理端接口权限
//            SaRouter.match("/printTemplate/**").notMatch("/printTemplate/listAll", "/printTemp/query_all_valid").check(r -> StpUtil.checkPermission("printTemplate"));
//            //该接口在物料管理页面也会调用
//            SaRouter.match("/printTemplate/listAll").check(r -> StpUtil.checkPermissionOr("printTemplate", "material"));
//            //打印模板对外接口
//            SaRouter.match("/printTemp/query_all_valid", r -> StpUtil.checkPermission("printTemp#query_all_valid"));
//            //打印记录管理端接口权限
//            SaRouter.match("/printerRecord/**", r -> StpUtil.checkPermission("printerRecord"));
//            //打印记录对外接口权限
//            SaRouter.match("/printer_history/insert_batch", r -> StpUtil.checkPermission("printer_history#insert_batch"));
//            //打印记录导出管理端接口权限
//            SaRouter.match("/printRecordExportHistory/**", r -> StpUtil.checkPermission("printRecordExportHistory"));
//            //数据同步对外接口权限
//            SaRouter.match("/api/sync/administrative_division", r -> StpUtil.checkPermission("api#sync#administrative_division"));
//            SaRouter.match("/api/sync/shop", r -> StpUtil.checkPermission("api#sync#shop"));
//            SaRouter.match("/api/sync/shop-staff", r -> StpUtil.checkPermission("api#sync#shop_staff"));
//            //数拓菜单、人员接口
//            SaRouter.match("/api/staff/batch-by-shops", r -> StpUtil.checkPermission("api#staff#batch_by_shops"));
//            SaRouter.match("/api/menu/list-all", r -> StpUtil.checkPermission("api#menu#list_all"));
//            SaRouter.match("/api/menu/batch-by-shops", r -> StpUtil.checkPermission("api#menu#batch_by_shops"));
//            //飞书H5权限
//            SaRouter.match("/lark/**")
//                    // "/lark/web/**"是管理端接口
//                    .notMatch("/lark/web/**")
//                    .check(r -> StpUtil.checkPermission("lark_h5"));
//        })).addPathPatterns("/**");
//    }
//
//
//}
